package com.eascs.ticket.configuration.controller;

import java.util.List;

import javax.inject.Inject;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.eascs.common.assertion.util.AssertWarnUtils;
import com.eascs.common.util.ObjectUtil;
import com.eascs.common.util.StringUtil;
import com.eascs.site.view.BaseRestResult;
import com.eascs.site.view.HtmlRestResult;
import com.eascs.site.view.ViewContext;
import com.eascs.ticket.common.controller.BaseActionRestController;
import com.eascs.ticket.common.entity.EntityUtil;
import com.eascs.ticket.common.form.OptionalIdForm;
import com.eascs.ticket.configuration.entity.UserAutoAssign;
import com.eascs.ticket.configuration.entity.UserAutoAssignUpdate;
import com.eascs.ticket.configuration.form.UserAutoAssignForm;
import com.eascs.ticket.configuration.service.UserAutoAssignService;
import com.eascs.web.sso.UserHolder;

@RestController
public class UserAutoAssignRestController extends BaseActionRestController {
	@Inject
	private UserAutoAssignService userAutoAssignService;

	@RequestMapping("/configuration/userAutoAssign/getUserAutoAssignEditView")
	public BaseRestResult<String> getUserAutoAssignEditView(OptionalIdForm optionalIdForm) {
		if (StringUtil.hasText(optionalIdForm.getId())) {
			ViewContext.put("userAutoAssign", this.userAutoAssignService.getUserAutoAssignById(optionalIdForm.getId()));
		} else {
			ViewContext.put("userAutoAssign", new UserAutoAssign());
		}
		return HtmlRestResult.popHtmlFragment("configuration/userAutoAssign/getUserAutoAssignEditView");
	}

	@RequestMapping("/configuration/userAutoAssign/saveUserAutoAssign")
	public BaseRestResult<String> saveUserAutoAssign(UserAutoAssignForm userAutoAssignForm) {
		AssertWarnUtils.assertTrue(!userAutoAssignForm.getAssignFrom().equals(userAutoAssignForm.getAssignTo()), "不能再转到同一个人");

		AssertWarnUtils.assertTrue(userAutoAssignForm.getDateTo().compareTo(userAutoAssignForm.getDateFrom()) >= 0, "结束日期必需在大于或者等于开始日期");
		List<UserAutoAssign> userAutoAssigns = userAutoAssignService.getUserAutoAssignFromUser(UserHolder.getUser().getCode());
		for (UserAutoAssign userAutoAssign : userAutoAssigns) {
			if (userAutoAssign.getId().equals(userAutoAssignForm.getId()))
				continue;

			AssertWarnUtils.assertTrue(userAutoAssignForm.getDateFrom().before(userAutoAssign.getDateFrom()) || userAutoAssignForm.getDateFrom().after(userAutoAssign.getDateTo()), "开始日期已经在{}和{}的范围里了", userAutoAssign.getDateFrom(), userAutoAssign.getDateTo());
			AssertWarnUtils.assertTrue(userAutoAssignForm.getDateTo().before(userAutoAssign.getDateFrom()) || userAutoAssignForm.getDateTo().after(userAutoAssign.getDateTo()), "结束日期已经在{}和{}的范围里了", userAutoAssign.getDateFrom(), userAutoAssign.getDateTo());
		}
		if (StringUtil.hasText(userAutoAssignForm.getId())) {
			UserAutoAssign userAutoAssign = this.userAutoAssignService.getUserAutoAssignById(userAutoAssignForm.getId());
			AssertWarnUtils.assertTrue(UserHolder.getUser().isSuperAdministrator() || userAutoAssign.getCreator().equals(UserHolder.getUser().getCode()), "只有本人或者管理员才有权限修改！");
			UserAutoAssignUpdate userAutoAssignUpdate = new UserAutoAssignUpdate();
			ObjectUtil.copySimpleProperties(userAutoAssignForm, userAutoAssignUpdate);
			EntityUtil.initUpdateEntity(userAutoAssignUpdate);
			this.userAutoAssignService.updateUserAutoAssign(userAutoAssignUpdate);
		} else {
			UserAutoAssign userAutoAssign = new UserAutoAssign();
			ObjectUtil.copySimpleProperties(userAutoAssignForm, userAutoAssign);
			EntityUtil.initInsertEntity(userAutoAssign);
			this.userAutoAssignService.insertUserAutoAssign(userAutoAssign);
		}
		return BaseRestResult.refresh();
	}
}
